package com.ziqi.hututubackend.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ziqi.hututubackend.model.VO.analyze.*;
import com.ziqi.hututubackend.model.dto.space.analyze.*;
import com.ziqi.hututubackend.model.entity.Space;
import com.ziqi.hututubackend.model.entity.User;

import java.util.List;

/**
 * @author wang
 * @description 针对表【space(空间)】的数据库操作Service
 * @createDate 2025-02-06 18:55:58
 */
public interface SpaceAnalyzeService extends IService<Space> {

    /**
     * 获取空间使用分析数据
     * @param spaceUsageAnalyzeRequest 请求类
     * @param loginUser 登录用户
     * @return 返回数据
     */
    SpaceUsageAnalyzeResponse getSpaceUsageAnalyze(SpaceUsageAnalyzeRequest spaceUsageAnalyzeRequest, User loginUser);

    /**
     * 获取空间图片使用情况数据
     * @param spaceCategoryAnalyzeRequest 请求类
     * @param loginUser 登录用户
     * @return
     */
    List<SpaceCategoryAnalyzeResponse> getSpaceCategoryAnalyze(SpaceCategoryAnalyzeRequest spaceCategoryAnalyzeRequest, User loginUser);

    /**
     * 获取标签使用情况数据
     * @param spaceTagAnalyzeRequest 请求类
     * @param loginUser 登录用户
     * @return
     */
    List<SpaceTagAnalyzeResponse> getSpaceTagAnalyze(SpaceTagAnalyzeRequest spaceTagAnalyzeRequest, User loginUser);

    /**
     * 获取图片大小情况统计
     * @param spaceSizeAnalyzeRequest 请求类
     * @param loginUser 登录用户
     * @return
     */
    List<SpaceSizeAnalyzeResponse> getSpaceSizeAnalyze(SpaceSizeAnalyzeRequest spaceSizeAnalyzeRequest, User loginUser);

    /**
     * 获取按时间维度统计用户的上传行为
     * @param spaceUserAnalyzeRequest 请求类
     * @param loginUser 登录用户
     * @return
     */
    List<SpaceUserAnalyzeResponse> getSpaceUserAnalyze(SpaceUserAnalyzeRequest spaceUserAnalyzeRequest, User loginUser);

    /**
     * 校验空间分析 权限
     * @param spaceAnalyzeRequest 请求类
     * @param loginUser 登录用户
     */
    void checkSpaceAnalyzeAuth(SpaceAnalyzeRequest spaceAnalyzeRequest, User loginUser);

    /**
     *
     * @param spaceRankAnalyzeRequest 请求类
     * @param loginUser 登录用户
     * @return
     */
    List<Space> getSpaceRankAnalyze(SpaceRankAnalyzeRequest spaceRankAnalyzeRequest, User loginUser);
}
